package cn.han.oop;

//本类用于测试代码块

/*1.当创建对象时，会触发构造函数
* 2.创建对象时，也会触发构造代码块，而且构造代码块优先于构造方法执行的
* 3.我们通过创建好的对象来调用普通方法
* 4.如果调用的普通方法里有局部代码块，对应的局部代码块才会执行
* 执行顺序：创建对象》构造代码块》构造方法》对象创建成功》普通方法》局部代码块*/
public class TestBlock {
    public static void main(String[] args) {
        //5.创建小猫类的对象
        Cat cat = new Cat();
        Cat cat1 = new Cat("美短");

    }
}

//1.创建小猫类用来测试
class Cat {
    //2.定义属性
    String food;
    //3.1创建无参构造

    public Cat() {
        System.out.println("我是无参构造");
    }
    //6.创建构造代码块
    {/*构造代码块
    1.位置：类里方法外
    2.执行时机：每次创造对象时，都会执行构造代码块，并且构造代码块优先于构造方法执行
    3.作用：用于提取所有构造方法的共性功能*/
        System.out.println("我是构造代码块");
    }

    //3.2创建含参构造String s

    public Cat(String s) {
        System.out.println("我是Cat类的含参构造" + s);
    }

    //4.创建普通方法
    public void jump() {
        System.out.println("小猫跳的老高了");
        //7.创建局部代码块
        {
            /*局部代码块{}
            * 1.位置：方法里、
            * 2.执行时机：调用方法时
            * 3.作用：控制变量的使用范围，变量的作用范围越小越好*/
            System.out.println("我是一个局部代码块");
            int i= 100;
            System.out.println(i);
        }
//        System.out.println(i);//局部代码块的变量只能在局部代码块里使用
    }
}
